package cn.neusoft.service.impl;

import cn.neusoft.mapper.CartItemMapper;
import cn.neusoft.pojo.CartItem;
import cn.neusoft.query.BaseQuery;
import cn.neusoft.query.CartItemQuery;
import cn.neusoft.service.ICartItemService;
import cn.neusoft.vo.PageBean;
import cn.neusoft.vo.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

@Service
public class CartItemService implements ICartItemService {

    @Autowired
    CartItemMapper cartItemMapper;

    @Transactional
    @Override
    public ResultBean add(CartItem cartItem) {

        if (cartItem==null ||
                cartItem.getUserId()==null || cartItem.getUserId()==0 ||
                cartItem.getBusinessId()==null || cartItem.getBusinessId()==0 ||
                cartItem.getFoodId()==null || cartItem.getFoodId()==0 ||
                cartItem.getQuantity()==null || cartItem.getQuantity()==0){
            return ResultBean.ERROR("请求参数为空值");
        }

        /*
        1、先使用foodId、businessId、userId进行搜索
          2、如果存在  修改数量
          3、如果不存在   添加
         */
        CartItemQuery cartItemQuery = new CartItemQuery(
                cartItem.getFoodId(),
                cartItem.getBusinessId(),
                cartItem.getUserId());
        //最多查出一条记录
        List<CartItem> cartItemList = cartItemMapper.getByCondition(cartItemQuery);

        //假设该购物车项之前不存在
        CartItem target = null;
        //之前存在
        if(cartItemList.size()>0){
            //将存在的对象赋值给target  target现在就是之前存在的购物车项
            target = cartItemList.get(0);
        }

        //最终的执行结果
        int i = 0;

        //之前不存在   添加
        if (target==null){
            i = cartItemMapper.add(cartItem);
        }else{
            // 之前存在  修改数量     拿出原先的数量+新增的数量  重新设置给target
            target.setQuantity(target.getQuantity()+cartItem.getQuantity());
            i = cartItemMapper.update(target);
        }

        return i>0?ResultBean.SUCCESS():ResultBean.ERROR("添加购物车项信息失败");
    }

    @Transactional
    @Override
    public ResultBean update(CartItem cartItem) {

        if (cartItem==null ||
                cartItem.getCartId()==null || cartItem.getCartId()==0 ||
                cartItem.getUserId()==null || cartItem.getUserId()==0 ||
                cartItem.getBusinessId()==null || cartItem.getBusinessId()==0 ||
                cartItem.getFoodId()==null || cartItem.getFoodId()==0){
            return ResultBean.ERROR("请求参数为空值");
        }

        int update = cartItemMapper.update(cartItem);

        return update>0?ResultBean.SUCCESS():ResultBean.ERROR("修改购物车项信息失败");
    }

    @Transactional
    @Override
    public ResultBean delete(Integer id) {

        if (id==null){
            return ResultBean.ERROR("请求参数为空值");
        }

        int delete = cartItemMapper.delete(id);

        return delete>0?ResultBean.SUCCESS():ResultBean.ERROR("删除购物车项信息失败");
    }

    @Transactional(readOnly = true)
    @Override
    public ResultBean getById(Integer id) {

        if (id==null){
            return ResultBean.ERROR("请求参数为空值");
        }

        CartItem cartItem = cartItemMapper.getById(id);

        return cartItem!=null?ResultBean.SUCCESS(cartItem):ResultBean.ERROR("查询购物车项信息失败");
    }

    @Transactional(readOnly = true)
    @Override
    public ResultBean getAll() {
        List<CartItem> cartItemList = cartItemMapper.getAll();
        return ResultBean.SUCCESS(cartItemList);
    }

    @Transactional(readOnly = true)
    @Override
    public ResultBean getByPage(BaseQuery baseQuery) {

        if (baseQuery == null){
            baseQuery = new CartItemQuery();
        }

        PageBean<CartItem> pageBean = new PageBean<>();
        int count = cartItemMapper.getCount(baseQuery);
        pageBean.setTotalRows(count);

        List<CartItem> cartItemList = cartItemMapper.getByPage(baseQuery);
        pageBean.setData(cartItemList);


        return ResultBean.SUCCESS(pageBean);
    }

    @Transactional
    @Override
    public ResultBean batchDel(List<Integer> ids) {

        if (ids==null || ids.size()==0){
            return ResultBean.ERROR("请求参数为空值");
        }

        for (Integer id:ids){
            int delete = cartItemMapper.delete(id);
            if (delete==0){
                throw new RuntimeException("删除失败");
            }
        }

        return ResultBean.SUCCESS();
    }

    @Override
    public ResultBean getCartByBidAndUid(Integer userId, Integer businessId) {

        if (userId == null || userId == 0 || businessId == null || businessId == 0){
            return ResultBean.ERROR("请求参数为空值");
        }

        CartItemQuery cartItemQuery = new CartItemQuery();
        cartItemQuery.setUserId(userId);
        cartItemQuery.setBusinessId(businessId);

        List<CartItem> cartItemList = cartItemMapper.getByCondition(cartItemQuery);

        return ResultBean.SUCCESS(cartItemList);
    }
}
